package com.freewater.javabase.demo.reflect.type;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
import java.util.List;

/**
 * 测试ParameterizedType的getOwnerType方法：<br/>
 * 测试结果：如果这个ParameterizedType是定义在其他类里面的内部类，
 * 那么返回的是这个ParameterizedType所在的那个外部类，否则返回null。
 */
public class Main2 {
    public static class Animal<T> {
        private HashMap<Integer, List<T>> myMap;
    }

    private Animal<String> animal;

    public static void main(String[] args) throws NoSuchFieldException {

        Field myMapField = Animal.class.getDeclaredField("myMap");
        ParameterizedType type = (ParameterizedType) myMapField.getGenericType();
        System.out.println(type.getOwnerType()); // null

        Field animalField = Main2.class.getDeclaredField("animal");
        type = (ParameterizedType) animalField.getGenericType();
        System.out.println(type.getOwnerType()); // class com.freewater.javabase.demo.reflect.type.Main2
    }
}
